package DateStructure.Class2.DEMO1;

//Object无法比较大小 故继承Comparabla 使用当中的comapareTo进行比较
//如果未继承Comparable则无法使用comparaTo
class AF<E extends Comparable<E>> {
    public E FindMax(E[] arrays) {
        E max = arrays[0];
        for (int i = 1; i < arrays.length; i++) {
//这里报错的原因：
//因为E在执行过程中会发生擦除机制 使得E的类型为Object 所以无法用运算符进行比较大小
//            if (arrays[i] > max) {
//                max = arrays[i];
//            }
            if(arrays[i].compareTo(max) >  0) {
                max = arrays[i];
            }
        }
        return max;
    }
}

class AF2{
    //这样写可以不用声明E是什么类型（AF2 af2不需要<Integer>）
    public<E extends Comparable<E>> E FindMax(E[] arrays) {
        E max = arrays[0];
        for (int i = 1; i < arrays.length; i++) {
            if(arrays[i].compareTo(max) > 0) {
                max = arrays[i];
            }
        }
        return max;
    }
}

class AF3{
    //加个static就可以不用new AF3
    public static <E extends Comparable<E>> E FindMax(E[] arrays) {
        E max = arrays[0];
        for (int i = 1; i < arrays.length; i++) {
            if(arrays[i].compareTo(max) > 0) {
                max = arrays[i];
            }
        }
        return max;
    }
}

public class FX {

}
